package com.eshore.norm.pojo.dto;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 云主机详情列表
 * </p>
 *
 * @author chenjl
 * @since 2024-01-05
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class NormVmDetail implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    private Long id;

    /**
     * 资源池id
     */
    @ApiModelProperty(value = "资源池id")
    private Long configId;

    /**
     * 创建时间
     */
    @ApiModelProperty(value = "创建时间")
    private LocalDateTime createDate;

    /**
     * 更新时间
     */
    @ApiModelProperty(value = "更新时间")
    private LocalDateTime updateDate;

    /**
     * 服务器的UUID。
     */
    @ApiModelProperty(value = "服务器的UUID")
    private String serversDetailId;

    /**
     * 访问ipv4地址
     */
    @ApiModelProperty(value = "访问ipv4地址")
    @TableField("accessIPv4")
    private String accessIPv4;

    /**
     * 访问ipv6地址
     */
    @ApiModelProperty(value = "访问ipv6地址")
    @TableField("accessIPv6")
    private String accessIPv6;

    /**
     * 指示是否使用了配置驱动器来创建此服务器。值为True或空字符串。空字符串表示False。
     */
    @ApiModelProperty(value = "指示是否使用了配置驱动器来创建此服务器")
    private String configDrive;

    /**
     * 创建日期，时间戳
     */
    @ApiModelProperty(value = "创建日期")
    private String created;

    /**
     * 镜像ID
     */
    @ApiModelProperty(value = "镜像ID")
    private String flavorId;

    /**
     * 镜像VCPU
     */
    @ApiModelProperty(value = "镜像VCPU")
    private Integer flavorVcpus;

    /**
     * 镜像RAM，单位MB
     */
    @ApiModelProperty(value = "id")
    private Integer flavorRam;

    /**
     * 镜像磁盘容量，单位G
     */
    @ApiModelProperty(value = "镜像RAM")
    private Integer flavorDisk;

    /**
     * 创建的临时磁盘大小，以GiB为单位。
     */
    @ApiModelProperty(value = "创建的临时磁盘大小")
    private Integer flavorEphemeral;

    /**
     * 分配的专用交换磁盘大小，以MiB为单位。
     */
    @ApiModelProperty(value = "分配的专用交换磁盘大小")
    private Integer flavorSwap;

    /**
     * 镜像展示名称
     */
    @ApiModelProperty(value = "镜像展示名称")
    private String flavorOriginalName;

    /**
     * 规格的额外规范键和值对字典，只有当用户被策略允许索引规格额外规范时才会包含此信息。
     */
    @ApiModelProperty(value = "规格的额外规范键和值对字典")
    private String flavorExtraSpecsKey;

    /**
     * 规格的额外规范键。
     */
    @ApiModelProperty(value = "规格的额外规范键")
    private String flavorExtraSpecsValue;

    /**
     * 表示主机的ID字符串。这是一个哈希值，因此实际上不会像主机名一样，它是使用来自project_id的数据进行哈希计算的，因此由两个不同的project_id看到的相同物理主机将是不同的。在同一项目内，在可用性或性能方面需要确定两个实例是否位于同一台物理主机上时，这非常有用。
     */
    @ApiModelProperty(value = "表示主机的ID字符串")
    @TableField("hostId")
    private String hostId;

    /**
     * 关联的密钥对的名称，如果有的话。
     */
    @ApiModelProperty(value = "关联的密钥对的名称")
    private String keyName;

    /**
     * 服务器名称。
     */
    @ApiModelProperty(value = "服务器名称")
    @TableField("NAME")
    private String name;

    /**
     * 磁盘配置。
     */
    @ApiModelProperty(value = "磁盘配置")
    @TableField("OS_DCF_diskConfig")
    private String osDcfDiskconfig;

    /**
     * 可用性区域名称。
     */
    @ApiModelProperty(value = "可用性区域名称")
    @TableField("OS_EXT_AZ_availability_zone")
    private String osExtAzAvailabilityZone;

    /**
     * 正在运行此实例的计算主机的名称。仅对管理员用户显示在响应中。
     */
    @ApiModelProperty(value = "正在运行此实例的计算主机的名称")
    @TableField("OS_EXT_SRV_ATTR_host")
    private String osExtSrvAttrHost;

    /**
     * 实例在元数据服务中报告的主机名。
     */
    @ApiModelProperty(value = "实例在元数据服务中报告的主机名")
    @TableField("OS_EXT_SRV_ATTR_hostname")
    private String osExtSrvAttrHostname;

    /**
     * 拟化驱动程序提供的虚拟化主机名。对于Ironic驱动程序，它是Ironic节点UUID。仅对管理员用户显示在响应中。
     */
    @ApiModelProperty(value = "拟化驱动程序提供的虚拟化主机名")
    @TableField("OS_EXT_SRV_ATTR_hypervisor_hostname")
    private String osExtSrvAttrHypervisorHostname;

    /**
     * 实例名称。计算API从实例名称模板生成实例名称。仅对管理员用户显示在响应中。
     */
    @ApiModelProperty(value = "实例名称")
    @TableField("OS_EXT_SRV_ATTR_instance_name")
    private String osExtSrvAttrInstanceName;

    /**
     * 使用AMI时内核镜像的UUID。如果没有，则为null。默认情况下，仅对管理员用户显示在响应中。
     */
    @ApiModelProperty(value = "使用AMI时内核镜像的UUID")
    @TableField("OS_EXT_SRV_ATTR_kernel_id")
    private String osExtSrvAttrKernelId;

    /**
     * 当通过多次创建启动服务器时，这是服务器启动的顺序。默认情况下，仅对管理员用户显示在响应中。
     */
    @ApiModelProperty(value = "当通过多次创建启动服务器时")
    @TableField("OS_EXT_SRV_ATTR_launch_index")
    private Integer osExtSrvAttrLaunchIndex;

    /**
     * 使用AMI时ramdisk镜像的UUID。如果没有，则为null。默认情况下，仅对管理员用户显示在响应中。
     */
    @ApiModelProperty(value = "使用AMI时ramdisk镜像的UUID")
    @TableField("OS_EXT_SRV_ATTR_ramdisk_id")
    private String osExtSrvAttrRamdiskId;

    /**
     * 用于服务器的预留ID。这是一个ID，在跟踪使用多次创建创建的服务器组时非常有用，这些服务器将具有相同的reservation_id。默认情况下，仅对管理员用户显示在响应中。
     */
    @ApiModelProperty(value = "用于服务器的预留ID")
    @TableField("OS_EXT_SRV_ATTR_reservation_id")
    private String osExtSrvAttrReservationId;

    /**
     * 实例的根设备名称。默认情况下，仅对管理员用户显示在响应中。
     */
    @ApiModelProperty(value = "实例的根设备名称")
    @TableField("OS_EXT_SRV_ATTR_root_device_name")
    private String osExtSrvAttrRootDeviceName;

    /**
     * 实例创建时的用户数据。默认情况下，仅对管理员用户显示在响应中。
     */
    @ApiModelProperty(value = "实例创建时的用户数据")
    @TableField("OS_EXT_SRV_ATTR_user_data")
    private String osExtSrvAttrUserData;

    /**
     * 实例的电源状态。这是一个枚举值，映射为：0_ NOSTATE1_ RUNNING3_ PAUSED4_ SHUTDOWN6_ CRASHED7_ SUSPENDED
     */
    @ApiModelProperty(value = "实例的电源状态")
    @TableField("OS_EXT_STS_power_state")
    private Integer osExtStsPowerState;

    /**
     * 实例的任务状态。
     */
    @ApiModelProperty(value = "实例的任务状态")
    @TableField("OS_EXT_STS_task_state")
    private String osExtStsTaskState;

    /**
     * 虚拟机状态。
     */
    @ApiModelProperty(value = "虚拟机状态")
    @TableField("OS_EXT_STS_vm_state")
    private String osExtStsVmState;

    /**
     * 已连接卷的ID。
     */
    @ApiModelProperty(value = "已连接卷的ID")
    private String osExtendedVolumesVolumesAttachedId;

    /**
     * 指示在删除服务器时是否删除已附加的卷。默认情况下，为False。
     */
    @ApiModelProperty(value = "指示在删除服务器时是否删除已附加的卷")
    private Boolean osExtendedVolumesVolumesAttachedDeleteOnTermination;

    /**
     * 服务器状态。
     */
    @ApiModelProperty(value = "服务器状态")
    @TableField("STATUS")
    private String status;

    /**
     * 多租户云中租户的UUID的日期和时间。
     */
    @ApiModelProperty(value = "多租户云中租户的UUID的日期和时间")
    private String tenantId;

    /**
     * 资源更新的日期和时间。日期和时间戳格式是ISO 8601。
     */
    @ApiModelProperty(value = "资源更新的日期和时间")
    private String updated;

    /**
     * 拥有服务器的用户的用户ID。
     */
    @ApiModelProperty(value = "拥有服务器的用户的用户ID")
    private String userId;

    /**
     * 错误响应代码。
     */
    @ApiModelProperty(value = "错误响应代码")
    private Integer faultCode;

    /**
     * 发生异常时的日期和时间。日期和时间戳格式是ISO 8601。
     */
    @ApiModelProperty(value = "发生异常时的日期和时间")
    private String faultCreated;

    /**
     * 错误消息。
     */
    @ApiModelProperty(value = "错误消息")
    private String faultMessage;

    /**
     * 堆栈跟踪。如果响应代码不是500或者您具有管理员权限，则可以使用它。
     */
    @ApiModelProperty(value = "堆栈跟踪")
    private String faultDetails;

    /**
     * 操作进度的百分比值。仅当服务器状态为ACTIVE、BUILD、REBUILD、RESIZE、VERIFY_RESIZE或MIGRATING时，此参数才会出现。
     */
    @ApiModelProperty(value = "操作进度的百分比值")
    private Integer progress;

    /**
     * 安全组名称
     */
    @ApiModelProperty(value = "安全组名称")
    private String securityGroupName;

    /**
     * 如果实例被锁定，则为True；否则为False。
     */
    @ApiModelProperty(value = "如果实例被锁定")
    private Boolean locked;

    /**
     * 主机状态。列表中的下一个值可以覆盖前一个值：如果nova_compute正常运行，则为UP。如果nova_compute未被服务组驱动程序报告，则为UNKNOWN。如果nova_compute被强制关闭，则为DOWN。如果nova_compute处于维护模式，则为MAINTENANCE。如果服务器没有主机，则为空字符串。此属性仅在策略允许的情况下出现在响应中。默认情况下，只有管理员可以获取此参数
     */
    @ApiModelProperty(value = "主机状态")
    private String hostStatus;

    /**
     * 描述
     */
    @ApiModelProperty(value = "描述")
    private String description;

    /**
     * 锁定服务器的原因
     */
    @ApiModelProperty(value = "锁定服务器的原因")
    private String lockedReason;


}
